#include "textura.h"

/*------------------------------------------------------------------------------
	Constructor
------------------------------------------------------------------------------*/
CTextura::CTextura()
{
	m_Textura=0;
	m_bCargada=FALSE;
	m_iAncho=0;
	m_iAlto=0;
}

/*------------------------------------------------------------------------------
	Destructor
------------------------------------------------------------------------------*/
CTextura::~CTextura()
{
}
/*------------------------------------------------------------------------------
	Loader
------------------------------------------------------------------------------*/
Bool CTextura::Cargar(const char *szNombreArchivo)
{
   	SDL_Surface *texaux; 
   	
    if (!(texaux=IMG_Load(szNombreArchivo)))
    {
    	printf( "- ERROR: No se pudo cargar [%s]\n", szNombreArchivo);	
    	return FALSE;
    }
    
	glGenTextures( 1, &m_Textura );
	
    glBindTexture( GL_TEXTURE_2D, m_Textura );
    glTexImage2D( GL_TEXTURE_2D, 0, 3, texaux->w,texaux->h, 0, GL_RGB,GL_UNSIGNED_BYTE, texaux->pixels );

    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );

	glBindTexture( GL_TEXTURE_2D, 0 );

	m_iAncho=texaux->w;
	m_iAlto=texaux->h;
	
    if ( texaux )
	    SDL_FreeSurface( texaux );
	    
    printf( "+ [%s] cargado\n", szNombreArchivo);	

	m_bCargada=TRUE;
    return TRUE;
}
/*------------------------------------------------------------------------------
	Texture loader
------------------------------------------------------------------------------*/
Bool CTextura::Cargar(const char *szNombreArchivo,GLenum formato)
{
   	SDL_Surface *texaux; 
   	
    if (!(texaux=IMG_Load(szNombreArchivo)))
    {
    	printf( "- ERROR: No se pudo cargar [%s]\n", szNombreArchivo);	
    	return FALSE;
    }
    
	glGenTextures( 1, &m_Textura );
	
    glBindTexture( GL_TEXTURE_2D, m_Textura );
    glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA8, texaux->w,texaux->h, 0, formato,GL_UNSIGNED_BYTE, texaux->pixels );

    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
    

	glBindTexture( GL_TEXTURE_2D, 0 );

	m_iAncho=texaux->w;
	m_iAlto=texaux->h;
	
    if ( texaux )
	    SDL_FreeSurface( texaux );
	    
    printf( "+ [%s] cargado\n", szNombreArchivo);	

	m_bCargada=TRUE;
    return TRUE;
}

/*------------------------------------------------------------------------------
------------------------------------------------------------------------------*/
Bool CTextura::Cargar(const char *szNombreArchivo,const char *szDirBase,GLenum formato)
{
   	SDL_Surface *texaux; 
   	char path_tex[255];
   	
	strcpy(path_tex,"");
	strcpy(path_tex,szDirBase);
	strcat(path_tex,szNombreArchivo);
   	
    if (!(texaux=IMG_Load(path_tex)))
    {
    	printf( "- ERROR: No se pudo cargar [%s]\n", path_tex/*szNombreArchivo*/);	
    	return FALSE;
    }
    
	glGenTextures( 1, &m_Textura );
	
    glBindTexture( GL_TEXTURE_2D, m_Textura );
    glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA8, texaux->w,texaux->h, 0, formato,GL_UNSIGNED_BYTE, texaux->pixels );

    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
    

	glBindTexture( GL_TEXTURE_2D, 0 );

	m_iAncho=texaux->w;
	m_iAlto=texaux->h;
	
    if ( texaux )
	    SDL_FreeSurface( texaux );
	    
    printf( "+ [%s] cargado\n", szNombreArchivo);	

	m_bCargada=TRUE;
    return TRUE;
}
/*------------------------------------------------------------------------------
------------------------------------------------------------------------------*/
void CTextura::Bind()
{
	glBindTexture( GL_TEXTURE_2D, m_Textura );
}

/*------------------------------------------------------------------------------
------------------------------------------------------------------------------*/
void CTextura::Liberar()
{
	glBindTexture( GL_TEXTURE_2D, 0 );
	if(!m_bCargada)
		return;
			
	glDeleteTextures(1,&m_Textura);			
	m_bCargada=FALSE;	
	printf( "- Textura Liberada\n");
}
